import { BaseController, CoolController } from "@cool-midway/core";
import { Body, Inject, Post } from "@midwayjs/core";
import { OrderAssignEntity } from "../../entity/assign";
import { OrderAssignService } from "../../service/assign";

/**
 * 订单分配
 */
@CoolController({
    api: ['add', 'delete', 'update', 'info', 'list', 'page'],
    entity: OrderAssignEntity,
    service: OrderAssignService,
    serviceApis: [
        'assign',
        'unassign'
    ],
    pageQueryOp: {
        fieldEq: ['a.orderId', 'a.itemId', 'a.providerId', 'a.vehicleId', 'a.status']
    }
})
export class ProviderOrderAssignController extends BaseController {
    @Inject()
    orderAssignService: OrderAssignService;

    /**
     * 我的分配子订单
     */
    @Post('/myAssignedPage', { summary: '服务人员查看分配给自己的子订单' })
    async myAssignedPage(@Body() body) {
        return this.ok(await this.orderAssignService.myAssignedItems(body ?? {}));
    }

    /**
     * 更新执行状态
     */
    @Post('/updateExecuteStatus', { summary: '服务人员更新执行状态' })
    async updateExecuteStatus(@Body() body) {
        await this.orderAssignService.updateExecuteStatus(body ?? {});
        return this.ok();
    }

    /**
     * 主订单详情（服务人员视角）
     */
    @Post('/orderDetail', { summary: '服务人员查看主订单详情' })
    async orderDetail(@Body('orderId') orderId: number) {
        return this.ok(await this.orderAssignService.orderDetailForProvider(orderId));
    }

    /**
     * 子订单详情（含分配信息）
     */
    @Post('/itemDetail', { summary: '服务人员查看子订单详情' })
    async itemDetail(@Body('itemId') itemId: number) {
        return this.ok(await this.orderAssignService.itemDetailForProvider(itemId));
    }

    /**
     * 查询主订单列表（含子订单）
     * - 普通成员：只能查看分配给自己的订单
     * - 团队负责人：可以查看团队下所有订单
     */
    @Post('/myOrders', { summary: '服务人员查询主订单列表' })
    async myOrders(@Body() body) {
        return this.ok(await this.orderAssignService.myOrders(body ?? {}));
    }

    /**
     * 查询主订单详情（含子订单和分配）
     * - 普通成员：只能查看有分配给自己的订单
     * - 团队负责人：可以查看团队下所有订单
     */
    @Post('/myOrderDetail', { summary: '服务人员查询主订单详情' })
    async myOrderDetail(@Body('orderId') orderId: number) {
        return this.ok(await this.orderAssignService.myOrderDetail(orderId));
    }
}


